<?php
/*
 * 公共加载文件
 * @arrange     Mark
 * @package     ixdcw
 * @file        common.inc.php
 * @time        12-12-19 下午2:12
 */
/** @var 是否启用debug */
define('DT_DEBUG', 0);
if(DT_DEBUG || (isset($_GET['debug']) && $_GET['debug'] == 'xddl')) {
	error_reporting(E_ALL);
	define('XD_DEBUG', 1);
	/** 所有debug的东西均以 debug_ 开头 */
    $debug_starttime = microtime(true);
} else {
	error_reporting(E_COMPILE_ERROR | E_CORE_ERROR | E_ERROR);
	define('XD_DEBUG', 0);
}

// 清除传递进来的 GLOBALS 变量, 这里包括请求的传递和文件的传递.
if(isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) exit('Request Denied');

// 处理相同变量
foreach(array('_POST', '_GET', '_COOKIE') as $__R) {
	/*
		$__R  :  $_POST
		$__R  :  $_GET
		$__R  :  $_COOKIE
	*/
	if($$__R) {
		// $_POST
		foreach($$__R as $__k => $__v) {
			// if has $_POST[version] = 6;
			// $__k is version
			// $$__k is $version
			// 如果已经设定值并且传递过来的值和设定的值相同则unset掉这个值
			if(isset($$__k) && $$__k == $__v)
				// 我觉得这里应该是unset掉传递过来的值,从而保证系统内值的使用
				unset($$__k);
		}
	}

}

// 设置gpc runtime, 关闭自动转义
@set_magic_quotes_runtime(0);
/** @var $MQG 魔法引号是否开启 */
$MQG = get_magic_quotes_gpc();

/** @var 定义文件调用, 如果其他文件被调用时候没有调用本文件,则会出现错误 */
define( 'IN_IXDCW'    , true );

/**
 * @var 是否管理文件调用
 * DT_ADMIN 定义在这个文件之前调用有效
 */
define( 'IN_ADMIN'      , defined('DT_ADMIN') ? true : false );
/** @var 文件根目录 */
define( 'DT_ROOT'       , str_replace("\\", '/', dirname(__FILE__)) );
/** @var 函数库目录定义 */
define( 'DT_INC'        , DT_ROOT . '/include');

define( 'DT_CORE'       , DT_ROOT . '/module');

/** @var config 文件, 网站配置的核心文件 */
$CFG = array();
// 公共函数
require DT_INC.'/global.func.php';

// 开启类的自动载入
spl_autoload_register('_loadClass');
//set_error_handler('_userErrorHandler');

require DT_ROOT.'/config.inc.php';

/** @var 定义网站访问地址 */
define( 'SITE_URL'      , $CFG['url'] );

/** @var 域名, cookie_domain 的示例为 .destoon.com */
define( 'DT_DOMAIN'     , $CFG['cookie_domain'] ? substr($CFG['cookie_domain'], 1) : '' );

/** @var 是否win 服务器 */
define( 'DT_WIN'        , strpos(strtoupper(PHP_OS), 'WIN') !== false ? true : false );

/** @var 系统语言包 */
define( 'DT_LANG'       , $CFG['language'] );
/** @var 生成的随机加密key */
define( 'DT_KEY'        , $CFG['authkey'] );
/** @var 页面输出字符集 */
define( 'DT_CHARSET'    , $CFG['charset'] );
/** @var 缓存的根目录 */
define( 'DT_CACHE'      , $CFG['cache_dir'] ? $CFG['cache_dir'] : DT_ROOT . '/file/cache' );
/** @var 皮肤文件的位置 */

/** 静态文件 */
define( 'PUBLIC_URL'    , SITE_URL . 'Public/' );
/** CSS 访问地址 */
define( 'CSS_URL'       , PUBLIC_URL . 'Css/' );
/** JS 访问地址 */
define( 'JS_URL'        , PUBLIC_URL . 'Js/' );
/** 静态图像访问路径 */
define( 'IMG_URL'       , PUBLIC_URL . 'Images/' );
/** CSS图像文件访问路径 */
define( 'CSSIMG_URL'    , CSS_URL . 'Images/' );
/** 静态图像真实路径 */
define( 'IMG_PATH'      , DT_ROOT.'/Public/Images' );
/** @var 系统VIP在系统中的叫法 */
define( 'VIP'           , $CFG['com_vip'] );
/** @var 错误名称 */
define('errmsg'         , 'Invalid Request');
/** 默认错误提示 */
define('ERR_MSG'        , errmsg);

/** @var 网站 BBS 链接 */
define('BBS_URL',  $CFG['bbs_url']);

/** @var $L 语言变量 */
$L = array();
// 常用语言变量, 按钮,分页等信息
include DT_ROOT.'/lang/'.DT_LANG.'/lang.inc.php';

// 扩展函数,文件内部应该放置 global函数的扩展,和系统内部调用的扩展.
require DT_ROOT.'/api/extend.func.php';
// 转义操作
if(!$MQG && $_POST) $_POST  = Str::addSlashes($_POST);
if(!$MQG && $_GET)  $_GET   = Str::addSlashes($_GET);

// 数据库初始化

$db = new DbMysqli();
$db->halt = (DT_DEBUG || IN_ADMIN) ? 1 : 0;
$db->setPre($CFG['tb_pre']);
$db->connect($CFG['db_host'], $CFG['db_user'], $CFG['db_pass'], $CFG['db_name'], $CFG['db_expires'], $CFG['db_charset'], $CFG['pconnect']);

// 时区设置, 时间设置
if(function_exists('date_default_timezone_set')) date_default_timezone_set($CFG['timezone']);

/** @var $DT_TIME 当前系统时间 */
$DT_TIME = time() + $CFG['timediff'];

/** @var $DT_QST 查询字串 */
$DT_QST = $_SERVER['QUERY_STRING'];

/** @var $DT_IP IP */
$DT_IP  = Env::ip();

/** @var $DT_URL url访问地址 */
$DT_URL = Env::uri();

/** @var $DT_REF 来源地址 */
$DT_REF = Env::referer();

/** @var $DT_BOT 机器人检测 */
$DT_BOT = Utils::isRobot();

$GROUP_ORDER = PCache::read("grouporder.php");//读取缓存会员组排序

// header输出
header("Content-Type:text/html;charset=".DT_CHARSET);

// 数据缓存类
require DT_INC.'/cache_'.$CFG['cache'].'.class.php';

// 非管理文件调用
if(!IN_ADMIN) {
	// 检测变量的非法注入.
	if(!empty($_SERVER['REQUEST_URI'])) {
		$uri = urldecode($_SERVER['REQUEST_URI']);
		if(strpos($uri, '<') !== false || strpos($uri, '0x') !== false || strpos($uri, "'") !== false || strpos($uri, '"') !== false) Prompt::alert(errmsg, 'goback');
	}

	// 清理sql
	if($_POST)  $_POST  = strip_sql($_POST);
	if($_GET)   $_GET   = strip_sql($_GET);
	// 禁止的IP
	$BANIP = PCache::read('banip.php');
	if($BANIP) banip($BANIP);
	// 应当执行的任务
}
// 将传递的值分析为全局变量
if($_POST) extract($_POST, EXTR_SKIP);
if($_GET)  extract($_GET , EXTR_SKIP);




// active record add for smart development
$arFile = DT_INC.'/ActiveRecord/ActiveRecord.php';
if (file_exists($arFile)) {
	require_once $arFile;
	$cfg = ActiveRecord\Config::instance();
	$cfg->set_model_directory(DT_INC.'/Model/');
	$cfg->set_connections(array(
		'development' =>"mysql://{$CFG['db_user']}:{$CFG['db_pass']}@{$CFG['db_host']}/{$CFG['db_name']}?charset={$CFG['db_charset']}")
	);
//	$cfg->set_cache('Xcache://localhost', array(
//		'dir' => DT_CACHE.'/php/',
//		'time'=> $DT_TIME,
//		'namespace'=> $CFG['cache_pre'],
//	));
}
// 缓存系统开启
$dc = new dcache();

$dc->pre = $CFG['cache_pre'];

/** @var $DT 系统的设置 */
$DT   = array();

/** @var $MOD 模块的设置 */
$MOD  = array();

/** @var $EXT 扩展的设置 */
$EXT  = array();

/** @var $CAT 当前分类的存储数组 */
$CAT  = array();

/** @var $ARE 当前区域的存储 */
$ARE  = array();

/** @var $AREA 所有的区域的缓存 */
$AREA = array();

/** @var $MODULE 所有模块的信息 */
$MODULE = array();


// 缓存的加载和重新生成
$CACHE = PCache::read('module.php');

$DT     = $CACHE['dt'];
$MODULE = $CACHE['module'];
$EXT    = PCache::read('module-3.php');

if(!IN_ADMIN) {

	// 网站关闭检测
	if($DT['close']) Prompt::message($DT['close_reason'].'&nbsp;');

	// 系统负载, 防止刷新, 防止代理
	if($DT['defend_cc'] || $DT['defend_reload'] || $DT['defend_proxy']) include DT_INC.'/defend.inc.php';
}

unset($CACHE, $CFG['timezone'], $CFG['db_host'], $CFG['db_user'], $CFG['db_pass'], $db_class);

/*
 * 模块初始化, 一般模块的配置文件都要写在 公共文件之前.
 * 模块id不能随便定义,id不存在将会重新定向到首页.
 * 这里的配置参照数据库中的设置.
 * ++++
 * 这里加载了模块的语言变量
 */
if(!isset($moduleid) || (isset($moduleid) && $moduleid == 1)) {
	$moduleid = 1;
	$module = 'destoon';
} else {
	$moduleid = intval($moduleid);
	isset($MODULE[$moduleid]) or dheader(SITE_URL);
	$module = $MODULE[$moduleid]['module'];
	$MOD = $moduleid == 3 ? $EXT : PCache::read('module-'.$moduleid.'.php');
	include DT_ROOT.'/lang/'.DT_LANG.'/'.$module.'.inc.php';
}
// 定义分站

/** @var $cityid 分站id, 默认为全国 */
$cityid = 0;

/** @var $city_name 城市的名称 */
$city_name = $L['allcity'];

/** @var $city_domain 分站域名 */
$city_domain   = '';

/** @var $city_template 分站模版 */
$city_template = '';

/** @var $city_sitename 分站的网站名称 */
$city_sitename = '';

// 是否开启分站
if($DT['city']) {
	include DT_INC.'/city.inc.php';
	define('CITY_ID', $cityid);
}

// 启用压缩,非变量存储, 非wap模式则启用输出缓冲压缩
($DT['gzip_enable'] && !$_POST && !defined('DT_WAP')) ? ob_start('ob_gzhandler') : ob_start();

/** @var $forward 上一个页面, 接受url传值覆盖 */
$forward = isset( $forward ) ? urldecode($forward) : $DT_REF;

/** @var $action 动作 */
$action  = isset( $action ) ? trim($action) : '';

/** @var $submit 是否post提交 */
$submit  = isset( $_POST['submit'] ) ? 1 : 0;
if($submit) {
	// 验证
	isset($captcha) or $captcha = '';
	isset($answer) or $answer = '';
}

/** @var $page 页码 */
$page          = isset( $page ) ? max(intval($page), 1) : 1;
/** @var $catid 分类ID */
$catid         = isset( $catid ) ? intval($catid) : 0;
/** @var $areaid 区域ID,用于筛选内容,和分站区分开 */
$areaid        = isset( $areaid ) ? intval($areaid) : 0;
/** @var $itemid 条目ID */
$itemid        = isset( $itemid ) ? ( is_array($itemid) ? $itemid : intval($itemid) ) : 0;
/** @var $pagesize 分页数目, 支持get变量或者post搜索重写 */
$pagesize      = $DT['pagesize'] ? $DT['pagesize'] : 30;
/** @var $offset sql使用的offset */
$offset        = ( $page - 1 )*$pagesize;
/** @var $kw 关键词 */
$kw            = isset( $kw ) ? htmlspecialchars(str_replace(array( "\'" ), array( '' ), trim(urldecode($kw)))) : '';
/** @var $keyword 关键词过滤 */
$keyword       = $kw ? str_replace(array(' ','*'), array( '%','%'), $kw) : '';
/** @var $today_endtime 今天的截止时间,用于sql搜索 */
$today_endtime = strtotime(date('Y-m-d', $DT_TIME) . ' 23:59:59');

// seo
/** @var $seo_file seo文件 */
$seo_file         = '';
/** @var $seo_title seo标题 */
$seo_title        = '';
/** @var $head_title 网站标题 */
$head_title       = '';
/** @var $head_keywords 网站关键字 */
$head_keywords    = '';
/** @var $head_description 网站描述 */
$head_description = '';
/** @var $head_canonical 权重页面 */
$head_canonical   = '';

if($catid)  $CAT = get_cat($catid);
if($areaid) $ARE = get_area($areaid);

/** @var $_userid 用户id */
$_userid      = 0;

/**
 * @var $_admin 是否管理员
 *      1     超级管理员
 *      2     普通管理员
 */
$_admin       = 0;

/** @var $_aid 管理的分站地区ID */
$_aid         = 0;

/** @var $_message 新信件数量 */
$_message     = 0;

/** @var $_chat 新对话数量 */
$_chat        = 0;

/** @var $_sound 站内信声音 */
$_sound       = 0;

/** @var $_online 在线状态 */
$_online      = 0;

/** @var $_money 资金余额 */
$_money       = 0;

/** @var $_credit 积分余额 */
$_credit      = 0;

/** @var $_insurance 金卡余额 */
$_cardmoney     = 0;

/** @var $_sms 短信余额 */
$_sms         = 0;

/** @var $_username 用户名 */
$_username    = '';

/** @var $_company 公司名称 */
$_company     = '';

/** @var $_passport 通行证 */
$_passport    = '';

/** @var $MG 用户组设置 */
$MG           = array();


/**
 * @var $_groupid 用户组
 * 默认为 3[游客], 否则就是解密权限之后的用户组
 */
$_groupid     = 3;

// 使用cookie进行权限的处理
$xdAuth = Cookie::get(Cookie::NAME_AUTH);
if($xdAuth) {
	$_dauth = explode("\t", Crypt::decode($xdAuth, md5(DT_KEY.$_SERVER['HTTP_USER_AGENT'])));
	$_userid = isset($_dauth[0]) ? intval($_dauth[0]) : 0;
	$_username = isset($_dauth[1]) ? trim($_dauth[1]) : '';
	$_groupid = isset($_dauth[2]) ? intval($_dauth[2]) : 3;
	$_admin = isset($_dauth[4]) ? intval($_dauth[4]) : 0;
	// 匿名访问, 用于外部数据调取, 加快速度,不验证用户密码
	// 对用户进行验证,如果是用户,并且不需要快速访问,则需要验证用户名和密码
	if($_userid && !defined('DT_NONUSER')) {

		$_password = isset($_dauth[3]) ? trim($_dauth[3]) : '';
		$user = $db->getOne("SELECT username,passport,company,truename,password,groupid,email,message,chat,sound,online,sms,credit,money,loginip,cardmoney,admin,aid,edittime,trade FROM {$db->getPre()}member WHERE userid=$_userid");
		if($user && $user['password'] == $_password) {
			// $_groupid == 2 禁止访问
			if($user['groupid'] == 2) Prompt::alert(lang('message->common_forbidden'));
			// cut by '_'
			extract($user, EXTR_PREFIX_ALL, '');
			/**
			 * $DT['ip_login' 同一帐号同时异地登录
			 *      0    允许
			 *      1    前台允许 后台不允许
			 *      2    不允许
			 */
			if($user['loginip'] != $DT_IP && ($DT['ip_login'] == 2 || ($DT['ip_login'] == 1 && IN_ADMIN))) {
				$_userid = 0; Cookie::set(COOKIE::NAME_AUTH, '');
				// 强制下线
				Prompt::alert(lang('message->common_login', array($user['loginip'])), SITE_URL);
			}
		} else {
			// 未通过验证, 非flash上传则清空权限
			$_userid = 0;
			if($db->linked && !isset($swfupload) && strpos($_SERVER['HTTP_USER_AGENT'], 'Flash') === false){
				Cookie::set(COOKIE::NAME_AUTH, '');
			}
		}
		unset($xdAuth, $user, $_dauth, $_password);
	}
}

// 游客
if($_userid == 0) { $_groupid = 3; $_username = ''; }
// 非管理员文件的授权操作
if(!IN_ADMIN) {
	// 管理员授权
	if($_groupid == 1) include DT_CORE.'/member/admin.inc.php';
	// 替换数据库在线
	if($_userid && !defined('DT_NONUSER')) {
		$db->query("REPLACE INTO {$db->getPre()}online (userid,username,ip,moduleid,online,lasttime) VALUES ('$_userid','$_username','$DT_IP','$moduleid','$_online','$DT_TIME')");
	} else {
		if(timetodate($DT_TIME, 'i') == 10) {
			$lastime = $DT_TIME - $DT['online'];
			$db->query("DELETE FROM {$db->getPre()}online WHERE lasttime<$lastime");
		}
	}
}
// 如果没有加载会员组或者授权
if (!$MG) {
	$MG = PCache::read('group-'.$_groupid.'.php');
}

//获取车主金卡信息
if ($_username) {
	//获取车主金卡信息
	$OwncardDb = Db('owncard');
	$usercard = $OwncardDb->getByUsername($_username);

}

define('AREA_ID', Area::area2id(Area::ip2area($DT_IP)));

include_once DT_ROOT . '/version.inc.php';

